﻿namespace Ymatou.UserAuth.Agent.Sso
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using Ymatou.UserAuth.Extension;
   

    /// <summary>
    /// sso 客户端签名校验module （auth 回调）
    /// </summary>
    public class ClientCallbackHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            if (context == null)
                return;
            var token = context.Request[ConstParameter.QueryToken];
            if (string.IsNullOrEmpty(token))
            {
                context.Response.Redirect("/");
                return;
            }
            var _timeOutVal = System.Configuration.ConfigurationManager.AppSettings["TokenTimeOut"];
            var __timeOut = string.IsNullOrEmpty(_timeOutVal) ? null : (DateTime?)DateTime.Now.Add(TimeSpan.Parse(_timeOutVal));
            context.Response.SetCookie(ConstParameter.SSOCOOKIEKEY_CLIENT_SIGN, token, domain: SSOClient.SubDomain(context.Request.Url.Host)/*, httpOnly: true*/, expires: __timeOut);

            var _returnUrl = context.Request[ConstParameter.ReturnUrl];
            if (!string.IsNullOrEmpty(_returnUrl))
                _returnUrl = _returnUrl.RemoveQueryStringKey(ConstParameter.QueryToken);
            else
                _returnUrl = "/";
            context.Response.Redirect(_returnUrl);

            #region
            //SSOClient.CheckSign(token
            //    , toke => new UserLoginAuthAgent().RequestTokenAuth(token)
            //    , (e1, e2) => new UserLoginAuthAgent().CheckSign(e1, e2).Success
            //    , userID =>
            //    {
            //        new UserLoginAuthAgent().GetBuserBills(userID);
            //        var _timeOutVal = System.Configuration.ConfigurationManager.AppSettings["SSOCookieTimeOut"];
            //        var __timeOut = string.IsNullOrEmpty(_timeOutVal) ? null : (DateTime?)DateTime.Now.Add(TimeSpan.Parse(_timeOutVal));
            //        context.Response.SetCookie(ConstParameter.SSOCOOKIEKEY_CLIENT_SIGN, token, domain: SSOClient.SubDomain(context.Request.Url.Host), httpOnly: true, expires: __timeOut);

            //        var _returnUrl = context.Request[ConstParameter.ReturnUrl];
            //        if (!string.IsNullOrEmpty(_returnUrl))
            //            _returnUrl = _returnUrl.RemoveQueryStringKey(ConstParameter.QueryToken);
            //        else
            //            _returnUrl = "/";                    
            //        context.Response.Redirect(_returnUrl);
            //    });
            #endregion
        }
    }
}
